邦友們有討論用Excel產生IP Address的方法.
當然Excel有公式,可以搭配公式來拉,不過量一大可能拉的很辛苦.
也有邦友提出用VBA來產生.
敝人另外用MySQL來產生.
MySQL產生以後也可以轉成CSV,MySQL有CSV引擎,
可以轉過去用,或者產生成文字檔.
當然後續利用MySQL Table裡的資料,再搭配其他程式語言來開發
IP Address的管理程式,也是不錯的.
敝人之前有一篇http://ithelp.ithome.com.tw/question/10133871
產生測試資料的方法,可以利用.
-- 產生 Class C 192.168.0.1 跳5的IP Address
產生51筆資料.
CALL prc_filler(51);
SELECT COUNT(1)
FROM filler;
+----------+
| COUNT(1) |
+----------+
| 51 |
+----------+
產生 192.168.0.1 ~ 192.168.0.251 的IP 位址, 192.168.0.255 是不能使用的,用於廣播.
SELECT INET_NTOA(3232235521 + (id - 1) * 5) AS ip_address
FROM filler;
+---------------+
| ip_address |
+---------------+
| 192.168.0.1 |
| 192.168.0.6 |
中間省略
| 192.168.0.246 |
| 192.168.0.251 |
+---------------+
-- 產生 256個 Class C, 由1開始跳5的IP Address
將 filler清空
TRUNCATE filler;
產生256筆資料
CALL prc_filler(256);
建立一個Table來存放每段的起頭位址.
CREATE TABLE ipaddr(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
ipaddr CHAR(15) NOT NULL
);
INSERT INTO ipaddr(ipaddr)
SELECT CONCAT('192.168.', CAST(id-1 AS CHAR(3) ), '.1')
FROM filler;
將 filler清空
TRUNCATE filler;
產生51筆資料.
CALL prc_filler(51);
建立另一個Table 來存放更多IP Address
CREATE TABLE moreip(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
ipaddr CHAR(15) NOT NULL
);
INSERT INTO moreip(ipaddr)
SELECT INET_NTOA(INET_ATON(i.ipaddr) + (f.id - 1) * 5)
FROM filler f
, ipaddr i;
Query OK, 13056 rows affected (1.36 sec)
+-------+-----------------+
| id | ipaddr |
+-------+-----------------+
| 1 | 192.168.0.1 |
| 2 | 192.168.0.6 |
| 3 | 192.168.0.11 |
中間省略
| 13054 | 192.168.255.241 |
| 13055 | 192.168.255.246 |
| 13056 | 192.168.255.251 |
+-------+-----------------+
轉成 CSV的方法,利用CSV引擎.
<pre class="c" name="code">CREATE TABLE csvip(
ipaddr CHAR(15) NOT NULL
)ENGINE=CSV;
INSERT INTO csvip(ipaddr)
SELECT ipaddr
FROM moreip;
離開MySQL Client,到Shell下.
以root身份登入.
到MySQL的資料目錄,將csvip.CSV cp到需要的目錄下,
變更為適當的owner.
接著用試算表程式打開,例如敝人是用LibreOffice Calc打開.
圖形如下兩圖,每換新的Class C,就會由1開始起跳.
提供 PHP 版:
<pre class="c" name="code">$id=1;
for ($i = ip2long('192.168.0.1'); $i<=ip2long('192.168.255.251'); $i++)
if (!preg_match('/\.(0|255)$/', $ip=long2ip($i)))
echo $id++, chr(9), $ip, chr(10);
換成數字就容易存放了
W.X.Y.Z = W*2^24 + X*2^16 + Y*2^8 + Z
以前看別人都這樣處理的啊...
之前有邦友討論用Excel,是要跳5的.
請參考 http://ithelp.ithome.com.tw/question/10144635?tag=rt.hb
所以就分享用另外的途徑與方法來產生.
MySQL有 INET_ATON() ,與 INET_NOTA() 兩個函數,
故利用此兩函數.
<pre class="c" name="code">
INET_ATON() 就是將IP Address轉成整數,不需要再自己代公式.
SELECT INET_ATON('192.168.0.1');
+--------------------------+
| INET_ATON('192.168.0.1') |
+--------------------------+
| 3232235521 |
+--------------------------+
再增加整數值,可以再轉回IP Address, 例如將上面數值加1後轉回
IP Address.
SELECT INET_NTOA(3232235522);
+-----------------------+
| INET_NTOA(3232235522) |
+-----------------------+
| 192.168.0.2 |
+-----------------------+
上面的分享是利用之前產生測試資料的,配合此兩函數的應用.
若是連續的,會更簡潔.可以產生一堆連續的,再將廣播的刪除.